package projetolp2.MealPoints;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

//sistema nao eh o Main principal! eh uma classe axiliadora do main - um sub main!

public class Sistema {
	
	Scanner sc = new Scanner(System.in);
	private List<Estabelecimento> listaDeEstabelecimentos;
	private static List<Usuario> listaDeUsuarios;
	static int  pos = 0;
	
    public List<Estabelecimento> ordenaEstabelecimentoPorPop(){
		
		return ordenaPorPopularidade();
		
	}
    
    protected static int calculaPopularidade(){  // RECEBER UM TIPO DE ESTABELECIMENTO COMO PARAMETRO
		
		int armPop = 0;
		for(int i = 0; i <listaDeUsuarios.size(); i ++){  
			
			armPop += listaDeUsuarios.get(i).getOpiniao().getVotos().get(pos).getValorDeOpiniao(); 
		}
		
		return armPop;
	}
    
    private List<Estabelecimento> ordenaPorPopularidade(){ //bubble sort
		
    	List<Estabelecimento> novaLista = this.listaDeEstabelecimentos;
    	
		for(int i = 0; i< novaLista.size(); i++){
			
			for(int j= 1; j <novaLista.size() - i; j++){
				
				if(novaLista.get(j).getPopularidade() < novaLista.get(j-1).getPopularidade()){ 
					Collections.swap(novaLista, j, j-1);
				}
			}
		}	
		
		return novaLista;
			
	}
    
    
    public Estabelecimento recomendacao(){
		
		return this.ordenaEstabelecimentoPorPop().get(0); 
	}
    
    public Estabelecimento recomendacao(TipoDeEstabelecimento tipo){
		
		return this.ordenaEstabelecimentoPorPop().get(0); //
	}
    
    public static Estabelecimento recomendacao(Usuario usuario){
		
		return null; //ajeitar
		
	}
    
    public List<Estabelecimento> recomendacao(int quantLugares){
    	
		List<Estabelecimento> suporte = this.ordenaEstabelecimentoPorPop();
		List<Estabelecimento> recFinal = new ArrayList<Estabelecimento>();
		for (int i = 0 ; i < quantLugares ; i++){
			recFinal.add(suporte.get(i));
		}
		return recFinal; 
		
	}
    
    public void adicionaEstabelecimento(Estabelecimento estabelecimento){
    	
    	listaDeEstabelecimentos.add(estabelecimento);
    	pos++;
    }
    
	public void cadastroUsuario() throws Exception{
		
		Usuario umUsuario = new Usuario("Joao");
		if(!(listaDeUsuarios.contains(umUsuario))){
	
			cadastraUsuario();
			
		}
		
	}
	
	private static void cadastraUsuario(){
		
		// implementar!
		
	}
    
    public void cadastraVotos(Usuario usuario){
    	
    	System.out.println("Coloque os votos para os estabelecimentos");
    	
    	for(int i = 0; i < listaDeEstabelecimentos.size(); i++){
    		
    	   System.out.println("Estabelecimento "+ i+1 + ": " +
    			   listaDeEstabelecimentos.get(i).getNome());
    	   System.out.println("Qua nota voce dah pelo estabelecimento? de -5 ateh 5. 0 = nao conheco");
    	   
    	   int opcao = sc.nextInt();
    	   
    	   switch(opcao){
    
    	   case(-5): System.out.println("Detesto!");	   
    	   case(-4): System.out.println("Muito ruim!");
    	   case(-3): System.out.println("Bastante Ruim!");
    	   case(-2): System.out.println("Ruim!");	   
    	   case(-1): System.out.println("Um pouco ruim!");
    	   case(0):  System.out.println("Nao conheco!");
    	   case(1):  System.out.println("Nao eh ruim!");
    	   case(2):  System.out.println("Bonzinho!");
    	   case(3):  System.out.println("Bastante bom!");
    	   case(4):  System.out.println("Muito bom!");
    	   case(5):  System.out.println("Incrivel!");
    	  
    	   		
    	   }
    	   

    		
    	}
    }
    
    
	

}
